package com.xique.system.api;

import com.xique.common.core.constant.ServiceNameConstants;
import com.xique.common.core.domain.R;
import com.xique.common.core.web.domain.AjaxResult;
import com.xique.common.core.web.domain.PageResult;
import com.xique.system.api.dto.AdminListDTO;
import com.xique.system.api.dto.OperateDTO;
import com.xique.system.api.dto.SystemUserDTO;
import com.xique.system.api.factory.RemoteSystemUserFallbackFactory;
import com.xique.system.api.model.LoginSystemUser;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户服务
 *
 * @author xique
 */
@FeignClient(contextId = "RemoteSystemUserService", value = ServiceNameConstants.SYSTEM_BIZ_SERVICE, fallbackFactory = RemoteSystemUserFallbackFactory.class)
public interface RemoteSystemUserService {
    /**
     * 通过用户名查询用户信息
     *
     * @param username 用户名
     * @return 结果
     */
    @GetMapping(value = "user/info/{username}")
    public R<LoginSystemUser> getUserInfo(@PathVariable("username") String username);

    @GetMapping(value = "user/info/{username}/{password}")
    R<LoginSystemUser> getUserInfoWithUpdatePassword(@PathVariable("username") String username, @PathVariable("password") String password);

    /**
     * 通过用户名查询用户私钥
     *
     * @param username
     * @return com.xique.common.core.domain.R<java.lang.String>
     * @author shd
     * @date 2021/11/18 10:12
     */
    @GetMapping(value = "user/key/{username}")
    R<String> getUserPrivateKey(@PathVariable("username") String username);

    /**
     * 获取操作员信息列表
     *
     * @return com.xique.common.core.domain.R<java.lang.String>
     * @author shd
     * @date 2022/1/26 13:58
     */
    @GetMapping(value = "user/adminList")
    R<List<AdminListDTO>> getAdminList();

    /**
     * 获取单个操作员
     *
     * @param operateId
     * @return com.xique.common.core.domain.R<com.xique.system.api.dto.AdminListDTO>
     * @author shd
     * @date 2022/3/29 13:27
     */
    @GetMapping(value = "user/getOperate")
    R<OperateDTO> getOperate(@RequestParam("operateId") Long operateId);

    /**
     * 获取单个操作员
     *
     * @param operateIds
     * @return com.xique.common.core.domain.R<com.xique.system.api.dto.AdminListDTO>
     * @author shd
     * @date 2022/3/29 13:27
     */
    @GetMapping(value = "user/getOperateList")
    R<List<OperateDTO>> getOperateList(@RequestParam("operateIds") String operateIds);

    /**
     * 新增岗亭用户
     *
     * @param dto
     * @return com.xique.common.core.domain.R<java.lang.Long>
     * @author shd
     * @date 2022/3/19 15:42
     */
    @PostMapping(value = "user/saveClientUser")
    R<Long> saveClientUser(@RequestBody SystemUserDTO dto);

    /**
     * 删除岗亭用户
     *
     * @param userId
     * @return com.xique.common.core.domain.R<java.lang.Boolean>
     * @author shd
     * @date 2022/3/19 16:54
     */
    @DeleteMapping(value = "user/removeClientUser")
    R<Boolean> removeClientUser(@RequestParam("userId") Long userId);

    /**
     * 根据parkID分页获取岗亭用户列表
     *
     * @param userDTO /
     * @return /
     */
    @PostMapping(value = "user/selectPageList")
    R<PageResult> selectPageList(@RequestBody SystemUserDTO userDTO);

    /**
     * @description: 根据用户id获取同一角色下所有用户信息
     * @author: HdongSun
     * @date: 2022/8/25 13:07
     * @param: [userId]
     * @return: com.xique.common.core.domain.R<java.util.List<com.xique.system.api.dto.SystemUserDTO>>
     **/
    @GetMapping(value = "user/selectRoleSystemUserList")
    R<List<SystemUserDTO>> selectRoleSystemUserByUserId(@RequestParam("userId") Long userId);
}
